package br.com.devteam.sgap.model;

import java.util.HashMap;
import java.util.Map;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import br.com.devteam.base.converter.Menuable;

@Entity
@Table
public class Perfil implements Menuable {
	
	public static final String PERFIL_ADMINISTRADOR = "ROLE_ADMINISTRADOR";
	public static final String PERFIL_PROFESSOR = "ROLE_PROFESSOR";
	public static final String PERFIL_ASSISTENTE = "ROLE_ASSISTENTE";
	public static final String PERFIL_ALUNO = "ROLE_ALUNO";
	
	private static Map<String, String> perfisLabel;
	
	static {
		perfisLabel = new HashMap<String, String>();
		perfisLabel.put(Perfil.PERFIL_ADMINISTRADOR, "Administrador");
		perfisLabel.put(Perfil.PERFIL_PROFESSOR, "Professor");
		perfisLabel.put(Perfil.PERFIL_ASSISTENTE, "Assistente");
		perfisLabel.put(Perfil.PERFIL_ALUNO, "Aluno");
	}
	
	public final static String getPerfilName(String perfil) {
		return perfisLabel.get(perfil);
	}

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column
	private Integer id;

	@Column(nullable = false)
	private String login;

	@Column(nullable = false)
	private String perfil;

	@ManyToOne(optional = false, fetch = FetchType.EAGER)
	private Usuario usuario;

	public Perfil() {
	}

	public Perfil(String perfil, Usuario usuario) {
		this.login = usuario.getLogin();
		this.perfil = perfil;
		this.usuario = usuario;
	}
	
	public Perfil(String perfil) {
		this.perfil = perfil;
	}
	
	public String getPerfilToString() {
		return getPerfilName(getPerfil());
	}

	public String getLogin() {
		return login;
	}
	
	public void setLogin(String login) {
		this.login = login;
	}

	public Usuario getUsuario() {
		return usuario;
	}
	
	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public String getPerfil() {
		return perfil;
	}
	
	public void setPerfil(String perfil) {
		this.perfil = perfil;
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}
	
	@Override
	public int hashCode() {
		return super.hashCode();
	}

	@Override
	public Object getIdentifier() {
		return perfil;
	}
	
	@Override
	public boolean equals(Object obj) {
		
		if (obj == null)
			return false;
		
		if (!(obj instanceof Perfil))
			return false;
		
		if (getPerfil().equals(((Perfil) obj).getPerfil()))
			return true;
		
		if (getId() != null && getId().equals(((Perfil) obj).getId()))
			return true;
		
		return super.equals(obj);
	}

}
